package co.yixiang.modules.quartz.domain;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import co.yixiang.domain.BaseDomain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 定时任务领域对象
 *
 * 继承自BaseDomain以获取基础的实体属性和方法
 * 使用@Data注解自动生成getter和setter方法
 * 使用@EqualsAndHashCode(callSuper = true)确保正确比较和哈希码生成
 * 使用@TableName("quartz_job")指定对应的数据库表名
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("quartz_job")
public class QuartzJob extends BaseDomain {

    // 定义定时任务相关的常量
    public static final String JOB_KEY = "JOB_KEY";

    /** 定时任务ID */
    @TableId
    private Long id;

    /** Spring Bean名称 */
    private String beanName;

    /** cron 表达式 */
    private String cronExpression;

    /** 状态：1暂停、0启用 */
    private Boolean isPause;

    /** 任务名称 */
    private String jobName;

    /** 方法名称 */
    private String methodName;

    /** 参数 */
    private String params;

    /** 备注 */
    private String remark;

    /**
     * 将源对象的属性复制到当前对象
     *
     * @param source 源对象，其属性将被复制到当前对象
     */
    public void copy(QuartzJob source){
        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
    }
}
